package com.zeus.pojo;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 冯扬龙
 * @date 2021/7/11 16:56
 */
 public class TrieNode {

        //当前结点的字母
        public char letter;

        //当前节点字母是否可以作为结束字母
        public boolean isEndLetter = false;

        //当前结点的下一结点集合
        public Set<TrieNode> next;

        /**
         * 空构造方法
         */
        public TrieNode() {

        }

        /**
         * 入参letter的构造方法
         * @param letter
         */
        public TrieNode(char letter) {
            this.letter = letter;

            //为每一个结点创建一个空的next集合
            this.next = new HashSet<>();
        }

        /**
         * 重写equals方法，结点字母相等，结点即相等
         * @param obj
         * @return
         */
        @Override
        public boolean equals(Object obj) {
            //如果不是同一类，则绝对不等
            if (!(obj instanceof TrieNode)) {

                //返回不等
                return false;
            }

            //字母相等，则结点相等，否则不等
            return this.letter == ((TrieNode)obj).letter;
        }

        /**
         * 重写了equals方法，就得跟着重写hashCode方法
         * @return
         */
        @Override
        public int hashCode() {
            //以letter的数值代表hashcode
            return this.letter;
        }

        /**
         * 查找某字母的下级字母结点
         * @param letter 查找的下一个字母
         * @return 下一个字母的结点
         */
        public TrieNode findNext(char letter) {
            //遍历查找
            for (TrieNode node : next) {

                //如果找到了
                if (node.letter == letter) {

                    //返回该结点
                    return node;
                }
            }

            //没找到，返回null
            return null;
        }

    }
